"""
葡萄病虫害图像识别服务器
使用Flask框架接收ESP32-CAM发送的图像并进行病虫害识别
"""

from flask import Flask, request, jsonify
import cv2
import numpy as np
import os

app = Flask(__name__)

# 病虫害类别（示例）
DISEASE_CLASSES = [
    "健康叶片",
    "黑腐病",
    "白粉病",
    "霜霉病",
    "叶斑病",
    "红蜘蛛感染"
]

@app.route('/')
def home():
    return "葡萄病虫害识别服务器运行中..."

@app.route('/identify', methods=['POST'])
def identify_disease():
    """
    接收图像并识别病虫害
    """
    if 'image' not in request.files:
        return jsonify({'error': '没有图像文件'}), 400
    
    file = request.files['image']
    
    if file.filename == '':
        return jsonify({'error': '未选择图像文件'}), 400
    
    try:
        # 读取图像
        nparr = np.frombuffer(file.read(), np.uint8)
        img = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
        
        # 获取图像基本信息
        height, width, channels = img.shape
        
        # 简单的图像质量检查
        blur_score = cv2.Laplacian(img, cv2.CV_64F).var()
        
        # 模拟病虫害识别结果（实际应用中这里会使用深度学习模型）
        # 基于图像模糊度和随机因素决定识别结果
        if blur_score < 100:
            # 图像模糊，无法准确识别
            result = {
                'disease': '图像模糊',
                'confidence': 0.0,
                'recommendation': '请重新拍摄清晰的图像',
                'image_info': {
                    'width': width,
                    'height': height,
                    'blur_score': float(blur_score)
                }
            }
        else:
            # 随机选择一个病虫害类别作为示例
            import random
            predicted_class = random.randint(0, len(DISEASE_CLASSES)-1)
            confidence = random.uniform(0.7, 0.95)
            
            result = {
                'disease': DISEASE_CLASSES[predicted_class],
                'confidence': round(confidence, 2),
                'image_info': {
                    'width': width,
                    'height': height,
                    'blur_score': float(blur_score)
                }
            }
        
        return jsonify(result)
        
    except Exception as e:
        return jsonify({'error': str(e)}), 500

@app.route('/status')
def status():
    """
    服务器状态检查
    """
    return jsonify({
        'status': 'running',
        'disease_classes': DISEASE_CLASSES,
        'note': '当前为演示版本，实际识别功能需要训练深度学习模型'
    })

if __name__ == '__main__':
    # 创建上传目录（如果不存在）
    if not os.path.exists('uploads'):
        os.makedirs('uploads')
    
    # 启动服务器
    app.run(host='0.0.0.0', port=5000, debug=True)